package com.foruo.learn.javaCore;

import java.util.concurrent.ArrayBlockingQueue;

/**
 * ArrayBlockingQueue案例详解
 *
 *
 * 内部维持了，读写条件
 *
 *      final ReentrantLock lock;
 *
 *      // 不为空的条件判断，实际上是读锁，即当条件满足的时候，可以读
 *      private final Condition notEmpty;
 *
 *      // 不为满的条件判断，实际上是写锁，即当条件满足的时候，可以写
 *      private final Condition notFull;
 *
 * @author GaoYuan
 */
public class ArrayBlockingQueueDemo {

    public static void main(String[] args){
        ArrayBlockingQueue queue = new ArrayBlockingQueue(10);

        /************************************* 存 ******************************************/

        // 失败返回false  ⭐️⭐️⭐️
        queue.offer(new Object());

        try {
            // 失败出错
            queue.put(new Object());
        }catch (InterruptedException e){
            e.printStackTrace();
        }

        /************************************* 取 ******************************************/

        // 没有就返回null  ⭐️⭐️⭐️
        queue.poll();

        // 队列空会报错
        queue.remove();
        try {
            // 失败出错
            queue.take();
        }catch (InterruptedException e){
            e.printStackTrace();
        }

        /************************************* 看 ******************************************/
        // 不取，只看一眼，没有则返回null
        queue.peek();

    }

}
